home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 27.zip / BS1 part 27 / ImageMaster_d3.adf / piarc.lzh.parta / bmp.rexx < prev    next >
OS/2 REXX Batch file  |  1993-04-14  |  5KB  |  209 lines

  1. /* ARexx BMP */
  2. parse arg var1
  3. /*
  4.  * BMP.rexx - MS-Windows (and OS/2) bitmap image load and save.
  5.  *
  6.  * If you encounter  a .BMP file we do not read, sent it to us (we suggest
  7.  * you use the Black Belt Bulletin Board at 1-406-367 2227) with an
  8.  * explanation and we will endeavor to extend our loader to handle it.
  9.  *
  10.  *  Written by: Black Belt Systems  Technical Development
  11.  *              December 23rd, 1992
  12.  * Last update: March 25th, 1993
  13.  *    Revision: 1.03
  14.  *         For: Black Belt Systems image processing series IM, IM F/c, and IP.
  15.  *
  16.  * Modifications:
  17.  *        1.00  23 Dec 1992 (BC) Initial release.
  18.  *        1.01   5 Jan 1993 (BC) Odd width bitmaps were not saved 32-bit
  19.  *                               alligned.
  20.  *        1.02   3 Feb 1993 (BC) Fixed enforcer hits
  21.  *        1.03  25 Mar 1993 (BC) Did not fail properly if not enough memory.
  22.  *
  23.  */
  24. call pragma('stack',20000);
  25.  
  26. /*
  27.  * open rexxsupport.library -- needed for some functions
  28.  */
  29. if ~show('L',"rexxsupport.library") then do
  30.   if addlib('rexxsupport.library',0,-30,0) then do
  31.       /* everything's ok */
  32.     end;
  33.   else do
  34.     say 'We Have A Library Problem, Unable To Load "rexxsupport.library"';
  35.     say 'Cannot operate script without this library - sorry!';
  36.     exit 10;
  37.     end;
  38.   end;
  39.  
  40. prtnme = 'IM_Port';
  41. cmdpath = 'cmpi:';
  42.  
  43. /*
  44.  * Get the file name parts
  45.  */
  46.   prevpath = 'ram:';
  47.   if show('C',rawpath) = 1 then do
  48.     prevpath = getclip(rawpath);
  49.     end;
  50.   prevname = 'image';
  51.   if show('C',rawname) = 1 then do
  52.     prevname = getclip(rawname);
  53.     end;
  54.   prevext = '.BMP';
  55.   if show('C',rawext) = 1 then do
  56.     prevext = getclip(rawext);
  57.     end;
  58.  
  59. address(prtnme);
  60. 'autoredraw 0';
  61.  
  62. if var1 = 'load' then do
  63.   loadquestion = 0
  64.   end
  65. else if var1 = 'save' then do
  66.   loadquestion = 1
  67.   end
  68. else do
  69.   options results;
  70.   'gadgets "Load .BMP","Image","Save .BMP","Image"';
  71.   loadquestion = result-1;
  72.   options;
  73.   end
  74.  
  75. if loadquestion < 0 then do
  76.   address(prtnme);
  77.   'tofront';
  78.   exit 0;
  79.   end
  80.  
  81. if loadquestion = 0 then do
  82.   options results;
  83.   'filerequest "'||prevpath||'" "'||prevname||'" "'||prevext||'" '||'"Load .BMP"';
  84.   bmpfile = result;
  85.   options;
  86.   call checkfile(bmpfile);
  87.   end
  88. if loadquestion = 1 then do
  89.   options results;
  90.   'filerequest "'||prevpath||'" "'||prevname||'" "'||prevext||'" '||'"Save .BMP"';
  91.   bmpfile = result;
  92.   options;
  93.   call checkfile(bmpfile);
  94.   
  95.   /* Could put compression question Here !! */
  96.   
  97.   end
  98.     
  99.     options results;
  100.     'jackin';
  101.     jack = result;
  102.     options;
  103.  
  104.     address command cmdpath||'bmp '||jack||' '||loadquestion||' "'||bmpfile||'" '||prevname||' '||compression;
  105.     address(prtnme);
  106.  
  107. 'autoredraw 1';
  108.  
  109. exit 0;
  110.  
  111.  
  112.  
  113.  
  114. checkfile: 
  115. arg thefile;
  116.   if thefile = 'FR_CANCELLED' then do
  117.     address(prtnme);
  118.     'tofront';
  119.     exit 0;
  120.     end;
  121.   prevpath = gimmepath(thefile);
  122.   call setclip(rawpath,prevpath);
  123.   prevname = gimmename(thefile);
  124.   call setclip(rawname,prevname);
  125.   prevext  = gimmeext(thefile);
  126.   call setclip(rawext,prevext);
  127.   return;
  128.   end
  129.  
  130. /*
  131.  * gimmepath
  132.  *
  133.  * This takes the provided argument and sucks the path out of it, then
  134.  * returns that path to the caller, sans file name.
  135.  */
  136. gimmepath:
  137.   arg fullnamegx;
  138.     tempgx = reverse(fullnamegx);
  139.     lengx = length(fullnamegx);   /* get length of string */
  140.     slashdex = index(tempgx,'/'); /* first occurance of '/' from right */
  141.     colondex = index(tempgx,':');  /* first occurance of ':' from right */
  142.     seploc = 0; /* assumes current dir, no path supplied */
  143.     if slashdex ~= 0 then do /* we assume we are in a DIR */
  144.       seploc = (lengx - slashdex)+1;
  145.       end;
  146.     else do
  147.       if colondex ~= 0 then do /* we assume we are on a device */
  148.         seploc = (lengx - colondex)+1;
  149.         end;
  150.       end;
  151.   gxname = substr(fullnamegx,seploc+1); /* if you ever need it */
  152.   gxpath = left(fullnamegx,seploc);
  153.   return(gxpath);
  154.   end
  155.  
  156.  
  157. gimmename:
  158.   arg fullnamegx;
  159.     tempgx = reverse(fullnamegx);
  160.     lengx = length(fullnamegx);   /* get length of string */
  161.     slashdex = index(tempgx,'/'); /* first occurance of '/' from right */
  162.     colondex = index(tempgx,':');  /* first occurance of ':' from right */
  163.     seploc = 0; /* assumes current dir, no path supplied */
  164.     if slashdex ~= 0 then do /* we assume we are in a DIR */
  165.       seploc = (lengx - slashdex)+1;
  166.       end;
  167.     else do
  168.       if colondex ~= 0 then do /* we assume we are on a device */
  169.         seploc = (lengx - colondex)+1;
  170.         end;
  171.       end;
  172.   extpos = lastpos(".",fullnamegx) - 2;
  173.   if extpos > seploc then do
  174.     gxname = substr(fullnamegx,seploc+1,extpos-seploc+1);
  175.     end;
  176.   else do
  177.     gxname = substr(fullnamegx,seploc+1);
  178.     end;
  179.   return(gxname);
  180.   end
  181.  
  182.  
  183. gimmeext:
  184.   arg fullnamegx;
  185.     tempgx = reverse(fullnamegx);
  186.     lengx = length(fullnamegx);   /* get length of string */
  187.     slashdex = index(tempgx,'/'); /* first occurance of '/' from right */
  188.     colondex = index(tempgx,':');  /* first occurance of ':' from right */
  189.     seploc = 0; /* assumes current dir, no path supplied */
  190.     if slashdex ~= 0 then do /* we assume we are in a DIR */
  191.       seploc = (lengx - slashdex)+1;
  192.       end;
  193.     else do
  194.       if colondex ~= 0 then do /* we assume we are on a device */
  195.         seploc = (lengx - colondex)+1;
  196.         end;
  197.       end;
  198.   extpos = lastpos(fullnamegx,'.');
  199.   if extpos > seploc then do
  200.     gxext = substr(fullnamegx,extpos+1);
  201.     end
  202.   else do
  203.     gxext = '';
  204.     end
  205.   return(gxext);
  206.   end
  207.  
  208.  
  209.